package style.zcyLeetCode.a_0001_认识复杂度和简单排序算法;

/**
 * 异或：无进位相加
 *      思路：不同为1  与0异或都是自身
 */
public class test001 {

    public static void printOddTimesNums2(int[] arr) {
        int eor = 0;
        for (int i : arr) {
            eor ^= i;
        }
        // eor = a ^ b
        // eor != 0
        // eor 必然有一个位置为1 （二进制）
        int rightOnly = eor & (~eor + 1);

        int onlyOne = 0;
        for (int i : arr) {
            if ((i & rightOnly) == 0) {
                onlyOne ^= i;
            }
        }
        System.out.println(onlyOne + " " + (eor ^ onlyOne));
    }

    public static void main(String[] args) {
//        int a = 11;
//        int b = 11;
//        swap(a, b);
//        System.out.println(a+" "+b);

        printOddTimesNums2(new int[]{1,1,2,2,3,4});
    }

    /**
     * 注意交换的两个数不能在同一个内存
     */
    public static void swap(int a, int b){
        a = a^b;
        b = a^b;
        a = a^b;
        System.out.println(a+" "+b);

    }
}
